<?php  
/*考点模型*/
class Test_point_model extends CI_Model
{

    var $table='test_point';

    function __construct()
    {
        parent::__construct();
        
    }

    /**
     * 返回数据表总条目个数
     * @return [type] [description]
     */
    function count_all()
    {
        return $this->db->count_all($this->table);
    }

    /**
     * 获得所有的条目
     * @return [type] [description]
     */
    function get_all()
    {
        $res=$this->db->get($this->table)->result_array();
        return $res;
    }

    /**
     * 通过id返回条目
     * @param  [type] $id [description]
     * @return [type]     [description]
     */
    function get_by_id($id)
    {
        return $this->db->get_where($this->table, array('id' => $id ))->row_array();
    }


    /**
     * 添加一个条目
     * @param [type] $item [description]
     */
    function add($item)
    {
        return  $this->db->insert($this->table,$item);
    }

    /**
     * 删除一个条目
     * @param  [type] $id [description]
     * @return [type]     [description]
     */
    function delete($id)
    {
        return $this->db->delete($this->table, array('id' => $id ));

    }

    /**
     * 更新一个条目
     * @param  [type] $id   [description]
     * @param  [type] $item [description]
     * @return [type]       [description]
     */
    function update($id,$item)
    {
        $this->db->where('id', $id);
        return $this->db->update($this->table,$item);
    }

    /**
     * 根据考点的id查询相关的知识点
     * @param  [type] $test_point_id [description]
     * @return [type]                [description]
     */
    function get_relative_knowledge_points($test_point_id)
    {

        return $this->db->get_where('knowledge_point', array('test_point_id' => $test_point_id ))->result_array();
    }


    

    /**
     * 通过考点得到相关的模块
     * @param  [type] $test_point_id [description]
     * @return [type]                [description]
     */
    function get_relative_modules($test_point_id)
    {
        $sql='
select m.id,m.name 
from test_point_in_module as tpim,module as m 
where tpim.module_id=m.id and m.type=0 and test_point_id=?';
        return $this->db->query($sql,$test_point_id)->result_array();
    }

    /**
     * 删除和这个考点相关的模块关系
     * @param  [type] $test_point_id [description]
     * @return [type]                [description]
     */
    function delete_relative_modules($test_point_id)
    {
        $sql='delete from test_point_in_module where test_point_id = ?';
        return $this->db->query($sql,array($test_point_id));
    }

    /**
     * 添加和这个考点相关的模块关系
     * @param [type] $test_point_id [description]
     * @param [type] $module_ids    [description]
     */
    function add_relative_modules($test_point_id,$module_ids)
    {
        foreach ($module_ids as $module_id ) {
            $relation = array(
                'module_id' => $module_id,
                'test_point_id' => $test_point_id
                 );
            if(!$this->db->insert('test_point_in_module',$relation))
                return FALSE;
        }
        return TRUE;
    }

    /**
     * 尝试删除一个考点，处理相关引用
     * @param  [type] $test_point_id [description]
     * @return [type]                [description]
     */
    function delete_cascade($test_point_id)
    {
        //如果有考题引用这个考点，不能删除
        $sql='select * from question as q where q.test_point_id = ?';
        if(count($this->db->query($sql,array($test_point_id))->result_array()))
            return FALSE;
        //如果有模块引用这个考点，不能删除
        $sql='select * from test_point_in_module as tpim where tpim.test_point_id = ?';
        if(count($this->db->query($sql,array($test_point_id))->result_array()))
            return FALSE;
        //如果有知识点引用这个考点，连带删除        
        //删除引用的图片
        $sql='select * from knowledge_point where test_point_id=?';
        $knowledge_points=$this->db->query($sql,$test_point_id)->result_array();
        foreach ($knowledge_points as $item) {
            $this->delete_files_by_dir('./uploads/exp/'.$item['id']);
            rmdir('./uploads/exp/'.$item['id']);
        }
        //删除数据库中的记录
        $sql='delete from knowledge_point where test_point_id = ?';
        if(!$this->db->query($sql,array($test_point_id)))
            return FALSE;
        $sql='delete from test_point where id = ?';
        if($this->db->query($sql,array($test_point_id)))
            return TRUE;
    }

    //根据目录删除目录下的所有文件
    function delete_files_by_dir($dir) {
        //删除目录下的文件：
        $dh=opendir($dir);
        while ($file=readdir($dh)) {
            if($file!="." && $file!="..") {
                $fullpath=$dir."/".$file;
                if(!is_dir($fullpath)) 
                {
                  unlink($fullpath);
                } 
                else 
                {
                  deldir($fullpath);
                }
            }
        }
    }

    //获取和考试模块相关的考点
    function get_by_module($module_id)
    {
        $sql='select t.id as test_point_id,t.content as test_point_content from test_point_in_module as tpim,test_point as t where tpim.test_point_id=t.id and tpim.module_id=?';
        return $this->db->query($sql,$module_id)->result_array();
    }

}
